﻿<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="search-keywords" content="client, datachange, subscription, development" />
<meta name="generator" content="Adobe RoboHelp 9" />
<title>Step 4 - Consuming DataChanges</title>
<link rel="StyleSheet" href="default.css" type="text/css" />
<style type="text/css">
/*<![CDATA[*/
<!--
P { margin-left:0pt;
margin-right:0pt;
font-family:Verdana;
margin-bottom:3pt;
margin-top:18pt; }
H1 { font-weight:bold;
margin-top:14pt;
margin-bottom:14pt;
margin-left:0pt;
margin-right:0pt;
page-break-after:avoid;
font-family:Verdana;
x-next-type:P;
font-size:18pt; }
H2 { font-weight:bold;
margin-top:14pt;
margin-bottom:14pt;
margin-left:0pt;
margin-right:0pt;
page-break-after:avoid;
font-family:Verdana;
x-next-type:P;
font-size:14pt; }
H3 { font-weight:bold;
margin-top:14pt;
margin-bottom:14pt;
margin-left:0pt;
margin-right:0pt;
page-break-after:avoid;
font-family:Verdana;
x-next-type:P;
font-size:12pt; }
-->
/*]]>*/
</style>

<script type="text/javascript" language="JavaScript">
//<![CDATA[
function reDo() {
  if (innerWidth != origWidth || innerHeight != origHeight)
     location.reload();
}
if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
        origWidth = innerWidth;
        origHeight = innerHeight;
        onresize = reDo;
}
onerror = null; 
//]]>
</script>
<style type="text/css">
/*<![CDATA[*/
<!--
div.WebHelpPopupMenu { position:absolute;
left:0px;
top:0px;
z-index:4;
visibility:hidden; }
-->
/*]]>*/
</style>

<script type="text/javascript" language="javascript1.2" src="whmsg.js">
</script>
<script type="text/javascript" language="javascript" src="whver.js">
</script>
<script type="text/javascript" language="javascript1.2" src="whproxy.js">
</script>
<script type="text/javascript" language="javascript1.2" src="whutils.js">
</script>
<script type="text/javascript" language="javascript1.2" src="whlang.js">
</script>
<script type="text/javascript" language="javascript1.2" src="whtopic.js">
</script>
</head>
<body>
<script type="text/javascript" language="javascript1.2">
//<![CDATA[
<!--
if (window.gbWhTopic)
{
        var strUrl = document.location.href;
        var bc = 0;
        var n = strUrl.toLowerCase().indexOf("bc-");
        if(n != -1)
        {
                document.location.href = strUrl.substring(0, n);
                bc = strUrl.substring(n+3);
        }

        if (window.addTocInfo)
        {
        addButton("show",BTN_TEXT,"Show","","","","",0,0,"","","");

        }
        if (window.writeBtnStyle)
                writeBtnStyle();

        if (window.writeIntopicBar)
                writeIntopicBar(1);

        
        document.write("<p style=\"font-family: Arial; font-size: 8pt; font-weight: 400;  font-style:normal; color: rgb(0, 0, 255); text-decoration:none; text-align: right\"> ");
AddMasterBreadcrumbs("index.htm", "font-family: Arial; font-size: 8pt; font-weight: 400;  font-style:normal; color: rgb(0, 0, 255); text-decoration:none; text-align: right", "&gt;", "Home", "welcome.htm");
document.write("Step 4 - Consuming DataChanges<\/p>");


        if (window.setRelStartPage)
        {
        setRelStartPage("index.htm");

                autoSync(1);
                sendSyncInfo();
                sendAveInfoOut();
        }
}
else
        if (window.gbIE4)
                document.location.reload();

//-->
//]]>
</script><span style="font-weight: bold; font-size: 10pt;"><font size="2" style="font-size:10pt;"><b><a href="http://www.opcfoundation.org" style="color: #0000ff; font-size: 10pt; text-decoration: underline;"><img src="opcfoundation.jpg" alt="opcfoundation.jpg" style="border: none;" width="189" height="61" align="left" border="0" /></a>The Interoperability Standard<br />
for Industrial Automation</b></font></span><br />
&#160;<br />
&#160;
<table cellspacing="0" width="100%" align="center">
<tr>
<td style="vertical-align: top;"><span style="font-size: 8pt;"><font size="1" style="font-size:8pt;"><a href="http://www.opcfoundation.org" target="_blank" style="color: #0000ff; text-decoration: underline;">OPC Foundation Online</a> | <a href="http://www.opcfoundation.org/certification" target="_blank">Certification</a> | <a href="http://www.opcfoundation.org/technology" target="_blank">Technology</a> | <a href="https://www.opcfoundation.org/news" target="_blank">News</a></font></span></td>
<td style="vertical-align: top; text-align: right; font-size: 8pt;"><a href="welcome.htm" style="color: #0000ff; text-decoration: underline;">Home</a> | <a href="getting_started.htm">Getting Started</a></td>
</tr>
</table>
<p style=" border-bottom:Solid 1px #000000; font-weight:bold; text-align:center; border-width:4px;"><span style="font-weight: bold; text-align: center;"><b><span style="font-weight: bold;"><b>Unified Architecture Technology Sample Applications</b></span></b></span></p>
<h1>Client Development Tutorial</h1>
<h2>Step 4 - Consuming Data-changes</h2>
<p>We will now add the code to consume the data-changes for our monitored item and output them to the screen.</p>
<p>This step is a continuation from <a href="step_3_-_setup_subscription.htm">Step 3 - Setup Subscription</a>.</p>
<h3>Defining our Window Instance</h3>
<ol type="1">
<li>
<p>Move the cursor above the event-handler.</p>
</li>
<li>
<p>Add the following window definition code:<br />
<span style="font-family: 'Courier New', monospace;">private SubscriptionOutput outputWindow;</span></p>
</li>
<li>
<p>Place the cursor back in the event-handler, but add the following code to the bottom of the code block:<br />
<span style="font-family: 'Courier New', monospace;">if( outputWindow == null )<br />
{<br />
&#160;outputWindow = new SubscriptionOutput();<br />
}</span></p>
</li>
</ol>
<h3>Directing Data-Change Output to Window</h3>
<ol type="1">
<li>
<p>We now need to add the actual event handler for the monitoredItem.Notification defined in <a href="step_3_-_setup_subscription.htm">Step 3</a>.</p>
</li>
<li>
<p>Move the cursor out of the event handler and then add the following code:<br />
void monitoredItem_Notification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e)<br />
{<br />
&#160;if(this.InvokeRequired)<br />
&#160;{<br />
&#160;&#160;&#160;this.BeginInvoke(new MonitoredItemNotificationEventHandler(monitoredItem_Notification), monitoredItem, e);<br />
&#160;&#160;&#160;return;<br />
&#160;}<br />
&#160;MonitoredItemNotification notification = e.NotificationValue as MonitoredItemNotification;<br />
&#160;if( notification == null )<br />
&#160;{<br />
&#160;&#160;&#160;return;<br />
&#160;}<br />
&#160;outputWindow.label1.Text = "value: " + Utils.Format( "{0}", notification.Value.WrappedValue.ToString()) +<br />
&#160;&#160;&#160;";\nStatusCode: " + Utils.Format( "{0}", notification.Value.StatusCode.ToString()) +<br />
&#160;&#160;&#160;";\nSource timestamp: " + notification.Value.SourceTimestamp.ToString() +<br />
&#160;&#160;&#160;";\nServer timestamp: " + notification.Value.ServerTimestamp.ToString();<br />
}</p>
</li>
<li>
<p>You are done!<br />
The code in this example is not perfect, and is missing some important things such as:</p>
<ol type="1">
<li>
<p>Sufficient error trapping.</p>
</li>
<li>
<p>Removal of monitored items and the subscription.</p>
</li>
</ol>
</li>
</ol>
<p>Next, see <a href="step_5_-_testing_your_client.htm">Step 5 - Testing your Client</a>.</p>
<h2>See Also</h2>
<ul type="disc">
<li>
<p><a href="useful_components.htm">Useful Components</a>.</p>
</li>
</ul>
<p style=" border-top:Solid 1px #000000; font-size:6pt; text-align:right; border-width:4px;"><span style="font-size: 6pt; text-align: right;"><font size="1" style="font-size:6pt;">Copyright OPC Foundation 1995-2013</font></span></p>
<script type="text/javascript" language="javascript1.2">
//<![CDATA[
<!--
if (window.writeIntopicBar)
        writeIntopicBar(0);


highlightSearch();
//-->
//]]>
</script>
</body>
</html>
